package com.ruoyi.psi.sale.delivery.service;


import com.ruoyi.produce.material.domain.ProduceMaterialRequisition;
import com.ruoyi.psi.sale.delivery.domain.*;

import java.util.List;

/**
 * 销售出库
 * 业务层
 */
public interface ISaleDeliveryService {


    /**
     * 销售订单出库查询
     * @param cond
     * @return
     */
    List<SaleDeliveryDto> selectSaleDeliveryList(SaleDeliveryCond cond);

    /**
     * 按编号查询
     * @param saleDeliveryId 销售订单出库编号
     * @return
     */
    SaleDeliveryDto selectSaleDeliveryById(String saleDeliveryId);

    /**
     * 销售订单出库新增
     * @param saleDelivery
     * @return
     */
    int insertSaleDelivery(SaleDeliveryDomain saleDelivery) throws Exception;

    /**
     * 销售订单出库更新
     * @param saleDelivery
     * @return
     */
    int updateSaleDelivery(SaleDeliveryDomain saleDelivery) throws Exception;

    /**
     * 销售订单出库
     * 用于app
     * @param saleDelivery
     * @return
     */
    int saleDeliveryStorage(SaleDeliveryDomain saleDelivery);

    /**
     * 更新销售订单出库删除标志位
     * @param saleDelivery
     * @return
     */
    int updateSaleDeliveryDeleteFlag(SaleDeliveryDomain saleDelivery);

    /**
     * 销售订单出库详细查询
     * @param cond
     * @return
     */
    List<SaleDeliveryListDto> selectSaleDeliveryListList(SaleDeliveryCond cond);

    /**
     * 查询销售订单出库对应的所有产品详细
     * @param saleDeliveryId 销售订单出库编号
     * @return
     */
    List<SaleDeliveryListDto> selectSaleDeliveryListListById(String saleDeliveryId);

    /**
     * 查询销售订单出库对应的指定产品详细
     * @param saleDeliveryId
     * @return
     */
    SaleDeliveryListDto  selectSaleDeliveryListById(String saleDeliveryId, String produceId);

    /**
     * 新增销售出库时，获取销售订单内未出库商品信息
     * @param saleOrderId 销售订单编号
     * @return
     */
    List<SaleDeliveryListDto> getSaleOrderListForDelivery(String saleOrderId);

//    /**
//     * 查询对应的销售订单在销售出库中的出库数量
//     * @param saleOrderId
//     * @return
//     */
//    double selectSaleOrderNumForDelivery(SaleDeliveryCond cond, String saleOrderId);
    /**
     * 根据销售订单查询销售出库记录
     * @param saleOrderId 销售订单编号
     * @return
     */
    List<SaleDeliveryDto> selectSaleDeliveryBySaleOrderId(String saleOrderId);
}
